5. 段之间的接口
Vertex/compute 前导到主体
前导负责装载顶点属性、实例/基址和动态状态;输出属性从 v8 开始,每个 location 占连续 4 个寄存器(x/y/z/w)。未使用分量可写零或按 Vulkan 未定义值处理,但段接口中的寄存器占用不可改变。主体入口的 EXEC、push constants、workgroup id 和 descriptor 基址保持入口值。
Fragment 主体到尾声
尾声读取颜色和深度输出:render target i 的 RGBA 位于 v[4i..4i+3],深度在 v32,模板在 v33,sample mask 在 v34。尾声可使用 demote/discard 修改 live/coverage,但必须保留 interlock 约束;输出寄存器在尾声结束前不得被 caller-saved 临时值覆盖。
通用段规则
段边界不改变寄存器文件、EXEC、MODE、fflags 或 pending waitcnt。段只能通过约定寄存器传值,不能依赖上一段的非 ABI 临时寄存器。拼接器必须按 8-byte 指令对齐、按 16-byte 段起始对齐,并在元数据中记录每段的入口/长度用于调试和陷阱 PC 映射。